StupidBeauty
Read times:1108Posted at:Sun Mar 16 21:10:41 2014
- no title specified

Smack3.4.1文档翻译:Smack:入门,Smack: Getting Started

此文档会向妳说明 Smack 的应用编程接口,并且指 出一些重要的类和概念。

JAR文件 和前提要求

Smack被设计为可以轻易的嵌入到任何一个已有的JDK 1.5或更高Java版本的程序中去。它没有外部依赖项(除了在语音聊天功能中所需要的Jingle以外),并且经过了优化,以达到尽可能小的体积。这个库是以多个JAR文件的形式提供的,以便妳根据自己程序的功能需求来灵活选择:

  • •. smack.jar -- 提供 了核心的 XMPP功能 是唯一一个 必需 的库。包含 了XMPP RFC 中说明的所有XMPP 特性。

  • •. smackx.jar -- 支持 XMPP 标准基金会 定义的狠多扩展(XEP),包括 多用户聊天、文件传输、用户搜索,等等。 这些扩展在 扩展手册 中有对应的文档。

  • •. smackx-debug.jar -- 一个强大的图形界面调试工具,用于分析协议。如果 它位于类路径(classpath)中,并且启用 调试 ,那么会被自动使用。

配置

Smack的初始化过程包含两个步骤。

  • •.初始化系统属性 - 初始化那些可通过 SmackConfiguration 类来访问的系统属性。这些属性可通过那个类的 getXXX 方法来获取。

  • •.初始化启动类 - 初始化任何需要在启动时便处于活跃状态的类,具体手段就是,实例化该类,然后,如果它继承自 SmackInitializer 的话则调用其 initialize 方法。如果它不继承该接口的话,则,初始化过程就需要在某块静态代码中进行了,这样,当该类被载入时便会自动执行初始化了。

初始化是通过一个配置文件来实现的。默认情况下,Smack会载入已经嵌入到Smack jar 中的配置文件 META-INF/smack-config.xml 。这个特殊的配置文件中包含了所有的默认属性值,以及一个待载入的初始化类列表。所有的管理器类型类都包含在这个初始化类列表中。如果妳的程序并不需要Smack 中上述的管理器提供的所有特性的话,那么,妳可以提供一个自定义的不包含相应特性的配置文件,以“关闭那些功能”。

如果妳想改变所使用的配置文件的位置的话,有两种方法可以实现:

  • •.通过代码来实现 - 调用SmackConfiguration setConfigFileUrl 方法,指定新配置文件的位置。

    SmackConfiguration.setConfigFileUrl("classpath:test/smack-config.xml", null)

  • •.虚拟机参数 - 将虚拟机参数 smack.config.file设置为新配置文件的位置。

    -Dsmack.config.file=file:///c:/com/myco/provider/myco_custom_config.xml

请注意,在部署用的归档文件(zip或tar)中, samples 目录里有一份 smack-config.xml 文件。

建立连接

XMPPConnection 类是用来与一个XMPP 服务器建立一个连接的。 以下是建立连接的代码示例:

// 建立到jabber.org 服务器的连接。

Connection conn1 = new XMPPConnection("jabber.org");

conn1.connect();

// 建立到jabber.org 服务器指定端口的连接。

ConnectionConfiguration config = new ConnectionConfiguration("jabber.org", 5222);

Connection conn2 = new XMPPConnection(config);

conn2.connect();

注意 ,在默认情况下(并且在可能的情况下) 在与服务器建立连接时会使用 具有最大安全性的选项包括使用 TLS加密 ConnectionConfiguration 类提供了针对创建的连接对象的高级控制功能,例如禁用 或启用加密 。参考 连接管理 以了解详情。

当妳创建了一个连接之后,妳应当使用一个用户名和密码通过 Connection.login(String username, String password) 方法 来登陆。 当妳登陆成功之后,就可以通过创建 Chat GroupChat 对象来开始与其它用户聊天了。

使用花名册 (Roster)

花名册可以帮助妳跟踪其它用户的可用性(是否在线)。用户可以按照分组来组织,例如“好友”和“同事”,然后,妳可以检查每个用户是否在线。

使用 Connection.getRoster() 方法 来获取花名册 。对应 的花名册类允许 妳检查其中所有 的花名册条目,获取它们 所属的分组, 以及查询每个条目对应 的用户是否在线。

读取 及写入数据包

从客户端发往XMPP 服务器的每条消息都被称作一个数据包,并且 是以XML 的形式的发送的。 org.jivesoftware.smack.packet 包中包含着封装了XMPP 所允许的三种基本数据包类型(消息 、存在性和信息/查询对(IQ) )的类。 Chat GroupChat 这样的一些类,提供 了高级别的结构 ,它们 会自动处理 好数据包的创建和发送过程,但是 ,妳仍然可以直接创建及发送数据包。 以下代码示例,演示的是 ,如何修改妳的在线状态,告知别人 妳当前正忙 ,忙着“出外钓鱼”:

// 创建一个新的可用性对象。参数为假(false),以表明我们目前正忙。

Presence presence = new Presence(Presence.Type.unavailable);

presence.setStatus("Gone fishing");

// 发送数据包(假设我们已经有一个叫做"con"的Connection实例)

con.sendPacket(presence);

Smack提供 了两种手段用于读取从外部传入的数据包: PacketListener PacketCollector 。两者 都采用了 PacketFilter 实例 来决定哪些数据包是应当处理的。 一个数据包监听器被用于事件风格 的编程, 而一个数据包收集器呢,拥有 一个 由数据包组成的 结果队列 妳可以 在该队列上做轮询 及阻塞式操作。所以,如果 妳想要在 有数据包 入时立即做出响应 的话,应当使用数据包监听器, 而如果妳想要等待特定数据包的到来的话则 可以使用一个数据包收集器。数据包收集 器和监听器可以使用一个Connection 实例来创建。

未知美人

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands